import { buildURL } from './../shared/URL' // 导入拼接URL方法
import { formatObject } from './../shared/formatObject'
import { normalizeProp } from './../shared/normalizeProps'
import { copyFile } from 'fs'

// 预处理URL地址
export function preProcessURL(config: AxiosRequestConfig): string {
  let { url, params } = config // 解构赋值拿到URL和参数
  return buildURL(url, params) // 返回拼接后的结果
}

// 预处理config参数
export function setConfig(config: AxiosRequestConfig): AxiosRequestConfig {
  config.url = preProcessURL(config);
  config.headers = preProcessHeaders(config.headers, config.data);// 注意顺序,需要在格式化数据前进行
  config.data = formatObject(config.data);

  return config
}

// 预处理请求Headers
export function preProcessHeaders(headers: any, data: any) {
  if (!data) return // 边界处理,没有data数据不涉及到数据交互，故不需要设置请求头
  headers = headers ? headers : {};// 当涉及到数据交互时,需要保证存在headers
  headers = normalizeProp(headers, 'Content-Type') // 保证Headers的Content-Type正确
  // 如果存在headers但没有给"Content-Type"赋值，就设置默认Headers
  if (headers !== null && !headers['Content-Type']) {
    headers['Content-Type'] = 'application/json; charset=utf-8'
  }
  return headers;
}
